home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / graphics / display / mpega / src / mpega_decode_asm.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-11-20  |  4.7 KB  |  180 lines

  1. /*------------------------------------------------------------------------------
  2.  
  3.     File    :    mpega_decode_asm.h
  4.  
  5.     Author  :    Stéphane TAVENARD
  6.  
  7.     $VER:   mpega_decode_asm.h    1.1  (24/07/1995)
  8.  
  9.     (C) Copyright 1995 Stéphane TAVENARD
  10.     All Rights Reserved
  11.  
  12.     #Rev|   Date   |              Comment
  13.     ----|----------|--------------------------------------------------------
  14.     0    |04/05/1995| Initial revision                      ST
  15.     1    |23/06/1995| Aminet release                      ST
  16.     2    |24/07/1995| Added Mixing frequency                  ST
  17.  
  18.     ------------------------------------------------------------------------
  19.  
  20.     Definition of MPEG audio routines (optimized)
  21.  
  22. ------------------------------------------------------------------------------*/
  23.  
  24. #ifndef MPEGA_DECODE_ASM_H
  25. #define MPEGA_DECODE_ASM_H
  26.  
  27. #include "Bitstream.h"
  28. #include "AudioPort.h"
  29.  
  30. #define SBLIMIT      32
  31. #define SCALE_BLOCK  12
  32. #define INT         short
  33.  
  34. #define MPEGA_SYNC_WORD     (long)0xFFF
  35. #define MPEGA_SYNC_WORD_LNGTH    12
  36.  
  37. #define MPEGA_FILETYPE_RAW    0
  38. #define MPEGA_FILETYPE_AIFF   1
  39.  
  40. /* Structure for Reading Layer II Allocation Tables from File */
  41.  
  42. typedef struct {
  43.     unsigned int steps:16;
  44.     unsigned int shift:4;
  45.     unsigned int bits:5;
  46.     unsigned int group:2;
  47.     unsigned int quant:5;
  48. } sb_alloc, *alloc_ptr;
  49.  
  50. typedef sb_alloc    al_table[SBLIMIT][16];
  51.  
  52.  
  53. /* Header Information Structure */
  54.  
  55. typedef struct {
  56.     int version;
  57.     int lay;
  58.     int error_protection;
  59.     int bitrate_index;
  60.     int sampling_frequency;
  61.     int padding;
  62.     int extension;
  63.     int mode;
  64.     int mode_ext;
  65.     int copyright;
  66.     int original;
  67.     int emphasis;
  68. } layer, *the_layer;
  69.  
  70. /* Parent Structure Interpreting some Frame Parameters in Header */
  71.  
  72. typedef struct {
  73.     layer    *header;     /* raw header information */
  74.     int     actual_mode;     /* when writing IS, may forget if 0 chs */
  75.     al_table    *alloc;      /* current bit allocation table */
  76.     int     tab_num;     /* number of allocation table */
  77.     int     stereo;      /* 1 for mono, 2 for stereo */
  78.     int     jsbound;     /* first band of joint stereo coding */
  79.     int     sblimit;     /* total number of sub bands */
  80.     int     channels;     /* # of channels to read (= stereo if not mono forced) */
  81.     int     *bit_alloc;
  82.     int     *scfsi;
  83.     int     *scale_index;
  84.     int     *sample;
  85.     INT     *fraction;
  86.     char    *bitstream_name;
  87.     BITSTREAM    *bs;               /* Bistream */
  88.     BYTE    *out_buffer[ 2 ];
  89.     long    out_buffer_size;
  90.     int     freq_div;
  91.     int     output_8bits;
  92.     int     quality;
  93.     int     mono_forced;
  94.     int     play;
  95.     int     audio_filter;
  96.     char    *out_file_name;
  97.     int     out_file_type;           /* 0=raw PCM 1=AIFF */
  98.     FILE    *out_file;
  99.     int     sub_band_size;
  100.     int     got_bits;
  101.     int     frame_count;
  102.     int     out_write_level;
  103.     int     out_write_length;
  104.     int     out_sample_length;
  105.     int     out_sample_freq;
  106.     int     bitstream_rate;        /* kbit/sec */
  107.     int     bitstream_freq;        /* Hz */
  108.     int     bitstream_buffer_size;
  109.     AU_PORT    *audio_port;
  110.     int     no_audio_wait;           /* if set, don't wait audio writes */
  111.     int     mixing_frequency;      /* Use mixing if > 0  #3 */
  112.  
  113. } frame_params;
  114.  
  115. #ifndef ASM
  116. #ifdef __SASC
  117. #define REG_A0 register __a0
  118. #define REG_A1 register __a1
  119. #define REG_A2 register __a2
  120. #define REG_A3 register __a3
  121. #define REG_A4 register __a4
  122. #define REG_A5 register __a5
  123. #define REG_A6 register __a6
  124. #define REG_D0 register __d0
  125. #define REG_D1 register __d1
  126. #define REG_D2 register __d2
  127. #define REG_D3 register __d3
  128. #define REG_D4 register __d4
  129. #define REG_D5 register __d5
  130. #define REG_D6 register __d6
  131. #define REG_D7 register __d7
  132. #define ASM __asm __saved
  133. #else
  134. #define ASM_A0 __A0
  135. #define ASM_A1 __A1
  136. #define ASM_A2 __A2
  137. #define ASM_A3 __A3
  138. #define ASM_A4 __A4
  139. #define ASM_A5 __A5
  140. #define ASM_A6 __A6
  141. #define ASM_D0 __D0
  142. #define ASM_D1 __D1
  143. #define ASM_D2 __D2
  144. #define ASM_D3 __D3
  145. #define ASM_D4 __D4
  146. #define ASM_D5 __D5
  147. #define ASM_D6 __D6
  148. #define ASM_D7 __D7
  149. #define ASM
  150. #endif
  151. #endif
  152.  
  153.  
  154. void ASM ASM_init_decode( ASM_D0 int sub_band_size,
  155.               ASM_D1 int output_8bits,
  156.               ASM_D2 int quality );
  157.  
  158. int ASM ASM_read_header( ASM_A0 frame_params *fr_ps );
  159. void ASM ASM_decode_header( ASM_A0 frame_params *fr_ps );
  160.  
  161.  
  162. void ASM ASM_I_decode_bitalloc( ASM_A0 frame_params *fr_ps );
  163. void ASM ASM_I_decode_scale( ASM_A0 frame_params *fr_ps );
  164. void ASM ASM_I_buffer_sample( ASM_A0 frame_params *fr_ps );
  165. void ASM ASM_I_deqnorm( ASM_A0 frame_params *fr_ps );
  166.  
  167. void ASM ASM_II_decode_bitalloc( ASM_A0 frame_params *fr_ps );
  168. void ASM ASM_II_decode_scale( ASM_A0 frame_params *fr_ps );
  169. void ASM ASM_II_buffer_sample( ASM_A0 frame_params *fr_ps );
  170. void ASM ASM_II_deqnorm( ASM_A0 frame_params *fr_ps, ASM_D0 int x );
  171.  
  172. LONG ASM ASM_sub_band_synthesis( ASM_A0 frame_params *fr_ps,
  173.                  ASM_D0 int band_count );
  174.  
  175. void ASM ASM_I_decode_frame( ASM_A0 frame_params *fr_ps );
  176. void ASM ASM_II_decode_frame( ASM_A0 frame_params *fr_ps );
  177.  
  178.  
  179. #endif /* MPEGA_DECODE_ASM_H */
  180.